package com.wcs.exam.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wcs.exam.dao.impl.mapper.entity.ExamUserRecord;
import com.wcs.exam.dao.po.ExamUserRecordExamCountPO;
import com.wcs.exam.dao.po.ExamUserRecordUserCountPO;

import java.util.Collection;
import java.util.List;

/**
 * 考试用户记录 持久化接口
 *
 * @author wcs
 * @since 2025-03-13
 */
public interface ExamUserRecordDao extends IService<ExamUserRecord> {

    /**
     * 根据条件分组统计
     *
     * @param wrapper   统计条件
     * @param classType 返回类型
     * @param <R>       统计结果类型
     * @return 统计结果
     */
    <R> List<R> selectObjs(Wrapper<ExamUserRecord> wrapper, Class<R> classType);

    /**
    * 获取最大排序
    *
    * @return 最大排序
    */
    Integer getMaxSort();

    /**
     * 根据考试类型、关联ID和用户ID统计用户考试次数
     *
     * @param examType 考试类型
     * @param relateId 关联ID
     * @param userIds  用户ID
     * @return 用户考试次数
     */
    List<ExamUserRecordUserCountPO> userCountByExamTypeAndRelateId(Integer examType, Long relateId, Collection<Long> userIds);

    /**
     * 根据考试类型和关联ID分组统计考试次数
     *
     * @param userId    用户ID
     * @param relateIds 关联ID
     * @return 考试考试次数
     */
    List<ExamUserRecordExamCountPO> examCountByUserIdAndRelateIds(Long userId, Collection<Long> relateIds);

}
